// 判题服务相关 VO 接口
// View Object - 用于前端展示的数据结构

import type { LanguageType } from '../dto/judge';

// 判题结果枚举
export type JudgeResult = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
// 0：CE，1：AC，2：WA，3：TLE，4：MLE，5：CE，6：RE，7：SE

// 代码提交响应
export interface SubmitResponse {
  code: number; // 200-成功，500-失败，401-未授权
  message: string;
  data: number; // 提交ID
}

// 排序项
export interface OrderItem {
  column: string;
  asc: boolean;
}

// 判题状态列表项
export interface JudgeStatusListVO {
  id: number; // 主键
  submitId: number; // 提交评测ID
  userId: number; // 用户ID
  title: string; // 题目标题
  ProblemId: string; // 题目展示ID
  pid: number; // 题目主键ID
  trainingId?: number; // 训练ID
  contestId?: number; // 比赛ID
  status: number; // 判题状态
  memory: number; // 内存消耗
  time: number; // 时间消耗
  result: JudgeResult; // 判题结果
  ioScore: number; // IO模式下总得分
  msg: string; // 判题过程中返回的信息
  language: LanguageType; // 语言
  isRejudge: boolean; // 是否是重判
  isManual: number; // 是否为人工评测
  createTime: string; // 创建时间
  updateTime: string; // 更新时间
}

// 分页判题状态列表
export interface PageJudgeStatusListVO {
  records: JudgeStatusListVO[]; // 查询数据列表
  total: number; // 总数
  size: number; // 每页显示条数，默认 10
  current: number; // 当前页
  orders: OrderItem[]; // 排序字段信息
  optimizeCountSql: boolean; // 自动优化 COUNT SQL
  searchCount: boolean; // 是否进行 count 查询
  optimizeJoinOfCountSql: boolean;
  maxLimit?: number; // 单页分页条数限制
  countId?: string; // countId
}

// 获取判题状态列表响应
export interface JudgeStatusListResponse {
  code: number; // 200-成功，500-失败，401-未授权
  message: string;
  data: PageJudgeStatusListVO;
}

// 单个判题结果详情
export interface Judge {
  id: number; // 主键
  submitId: number; // 提交评测ID
  userId: number; // 用户ID
  pid: number; // 题目主键ID
  title: string; // 题目标题
  ProblemId: string; // 题目展示ID
  trainingId?: number; // 训练ID
  contestId?: number; // 比赛ID
  status: number; // 判题状态
  memory: number; // 内存消耗
  time: number; // 时间消耗
  result: JudgeResult; // 判题结果
  ioScore: number; // IO模式下总得分
  msg: string; // 判题过程中返回的信息
  codeShare: number; // 代码分享状态
  code: string; // 提交的代码
  language: LanguageType; // 编程语言
  isRejudge: boolean; // 是否是重判
  isManual: number; // 是否为人工评测
  createTime: string; // 创建时间
  updateTime: string; // 更新时间
}

// 获取单个判题结果响应
export interface JudgeResultResponse {
  code: number; // 200-成功，500-失败，401-未授权
  message: string;
  data: Judge;
}